package com.ldx.queue;



import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author lidexin
 * @create 2021-10-16 8:54
 */
public class SynchronousQueueDemo {
    public static void main(String[] args) {
        BlockingQueue<String> blockingQueue = new SynchronousQueue<>();

        new Thread(()-> {
           try {
               System.out.println(Thread.currentThread().getName()+"put 1");
               blockingQueue.put("1");
               System.out.println(Thread.currentThread().getName()+"put 2");
               blockingQueue.put("2");
               System.out.println(Thread.currentThread().getName()+"put 3");
               blockingQueue.put("3");
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       },"T1").start();



       new Thread(()-> {
           try {
               TimeUnit.SECONDS.sleep(3);
               System.out.println(Thread.currentThread().getName()+"取"+blockingQueue.take());
               TimeUnit.SECONDS.sleep(3);
               System.out.println(Thread.currentThread().getName()+"取"+blockingQueue.take());
               TimeUnit.SECONDS.sleep(3);
               System.out.println(Thread.currentThread().getName()+"取"+blockingQueue.take());
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       },"T2").start();
    }
}
